library(readr)
census_starter <- read_csv("godaddy-microbusiness-density-forecasting/census_starter.csv")
train <- read_csv("godaddy-microbusiness-density-forecasting/train.csv")
test <- read_csv("godaddy-microbusiness-density-forecasting/test.csv")
IDS <- unique(train$cfips)
x_train <- array(0:(39-1), dim=c(39,1)) #Use the first 38 months to train
x_test <- array(38:47, dim=c(10,1)) #Use following 10 months to test
preds <- matrix(0, nrow = length(IDS), ncol=8) #Create matrix of 0's for predictions
last_preds <- matrix(0, nrow = length(IDS), ncol = 8) #Create matrix of 0's for last predictions
lin_trend = 0
ct = 0
for (i,c) in seq_along(IDS) {
df <- train[train$cfips==c,]
last <- df$microbusiness_density[length(df$microbusiness_density)]
active <-
}
Nested Data
Nested Data Frames by County
library(modelr)
library(tidyverse)
library(dplyr)
library(gapminder)
#Nest
by_county <- train %>%
group_by(cfips, state) %>%
nest()
#Model-fitting function
county_model <- function(df) {
lm(microbusiness_density ~ first_day_of_month, data = df)
}
#Apply to each element
models <- map(by_county$data, county_model)
#Adding models to dataframe
by_county <- by_county %>%
mutate(model = map(data, county_model))
by_county %>%
filter(state == "Texas")
#Adding residuals of each model
by_county <- by_county %>%
mutate(
resids = map2(data, model, add_residuals)
)
#Unnesting
resids <- unnest(by_county, resids)
#Plotting the residuals
resids %>%
ggplot(aes(first_day_of_month, resid)) +
geom_line(aes(group = cfips), alpha = 1/3) +
geom_smooth(se = FALSE)

#Facetting by state
resids %>%
ggplot(aes(first_day_of_month, resid, group = cfips)) +
geom_line(alpha = 1/3) +
facet_wrap(~state)

#Extracting model quality
glance <- by_county %>%
mutate(glance = map(model, broom::glance)) %>%
unnest(glance)
#Arrange by R square
glance %>%
arrange(r.squared)
#Plot worst r squared
glance %>%
ggplot(aes(state, r.squared)) +
geom_jitter(width = 0.5) +
theme(axis.text.x = element_text(angle = 90))

#Fable
ts_county <- as_tsibble(by_county[[3]][1])
Error in `dont_know()`:
! `as_tsibble()` doesn't know how to handle the list class yet.
Backtrace:
1. tsibble::as_tsibble(by_county[[3]][1])
2. tsibble:::as_tsibble.default(by_county[[3]][1])
3. tsibble:::dont_know(x, "as_tsibble")
by_county %>%
filter(
state %in% c("Texas"),
) %>%
model(
ets = ETS(box_cox(microbusiness_density, 0.3)),
arima = ARIMA(log(microbusiness_density)),
snaive = SNAIVE(microbusiness_density)
) %>%
forecast(h ="2 months") %>%
autoplot(filter(by_county))
Error in UseMethod("model") :
no applicable method for 'model' applied to an object of class "c('grouped_df', 'tbl_df', 'tbl', 'data.frame')"
t
LS0tCnRpdGxlOiAiZ29kYWRkeSBuZXN0ZWQgZGF0YSIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKCgpgYGB7cn0KbGlicmFyeShyZWFkcikKY2Vuc3VzX3N0YXJ0ZXIgPC0gcmVhZF9jc3YoImdvZGFkZHktbWljcm9idXNpbmVzcy1kZW5zaXR5LWZvcmVjYXN0aW5nL2NlbnN1c19zdGFydGVyLmNzdiIpCnRyYWluIDwtIHJlYWRfY3N2KCJnb2RhZGR5LW1pY3JvYnVzaW5lc3MtZGVuc2l0eS1mb3JlY2FzdGluZy90cmFpbi5jc3YiKQp0ZXN0IDwtIHJlYWRfY3N2KCJnb2RhZGR5LW1pY3JvYnVzaW5lc3MtZGVuc2l0eS1mb3JlY2FzdGluZy90ZXN0LmNzdiIpCmBgYAoKYGBge3J9CklEUyA8LSB1bmlxdWUodHJhaW4kY2ZpcHMpCgp4X3RyYWluIDwtIGFycmF5KDA6KDM5LTEpLCBkaW09YygzOSwxKSkgI1VzZSB0aGUgZmlyc3QgMzggbW9udGhzIHRvIHRyYWluCnhfdGVzdCA8LSBhcnJheSgzODo0NywgZGltPWMoMTAsMSkpICNVc2UgZm9sbG93aW5nIDEwIG1vbnRocyB0byB0ZXN0CgpwcmVkcyA8LSBtYXRyaXgoMCwgbnJvdyA9IGxlbmd0aChJRFMpLCBuY29sPTgpICNDcmVhdGUgbWF0cml4IG9mIDAncyBmb3IgcHJlZGljdGlvbnMKbGFzdF9wcmVkcyA8LSBtYXRyaXgoMCwgbnJvdyA9IGxlbmd0aChJRFMpLCBuY29sID0gOCkgI0NyZWF0ZSBtYXRyaXggb2YgMCdzIGZvciBsYXN0IHByZWRpY3Rpb25zCmxpbl90cmVuZCA9IDAKCmN0ID0gMApgYGAKCmBgYHtyfQpmb3IgKGksYykgaW4gc2VxX2Fsb25nKElEUykgewogIGRmIDwtIHRyYWluW3RyYWluJGNmaXBzPT1jLF0KICBsYXN0IDwtIGRmJG1pY3JvYnVzaW5lc3NfZGVuc2l0eVtsZW5ndGgoZGYkbWljcm9idXNpbmVzc19kZW5zaXR5KV0KICBhY3RpdmUgPC0gCn0KYGBgCgoKIyMjIE5lc3RlZCBEYXRhCgojIE5lc3RlZCBEYXRhIEZyYW1lcyBieSBDb3VudHkKYGBge3J9CmxpYnJhcnkobW9kZWxyKQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShkcGx5cikKbGlicmFyeShnYXBtaW5kZXIpCmBgYAojTmVzdApgYGB7cn0KYnlfY291bnR5IDwtIHRyYWluICU+JQogIGdyb3VwX2J5KGNmaXBzLCBzdGF0ZSkgJT4lCiAgbmVzdCgpCmBgYAojTW9kZWwtZml0dGluZyBmdW5jdGlvbgpgYGB7cn0KY291bnR5X21vZGVsIDwtIGZ1bmN0aW9uKGRmKSB7CiAgbG0obWljcm9idXNpbmVzc19kZW5zaXR5IH4gZmlyc3RfZGF5X29mX21vbnRoLCBkYXRhID0gZGYpCn0KYGBgCiNBcHBseSB0byBlYWNoIGVsZW1lbnQKYGBge3J9Cm1vZGVscyA8LSBtYXAoYnlfY291bnR5JGRhdGEsIGNvdW50eV9tb2RlbCkKYGBgCiNBZGRpbmcgbW9kZWxzIHRvIGRhdGFmcmFtZQpgYGB7cn0KYnlfY291bnR5IDwtIGJ5X2NvdW50eSAlPiUKICBtdXRhdGUobW9kZWwgPSBtYXAoZGF0YSwgY291bnR5X21vZGVsKSkKYGBgCgpgYGB7cn0KYnlfY291bnR5ICU+JSAKICBmaWx0ZXIoc3RhdGUgPT0gIlRleGFzIikKYGBgCiNBZGRpbmcgcmVzaWR1YWxzIG9mIGVhY2ggbW9kZWwKYGBge3J9CmJ5X2NvdW50eSA8LSBieV9jb3VudHkgJT4lCiAgbXV0YXRlKAogICAgcmVzaWRzID0gbWFwMihkYXRhLCBtb2RlbCwgYWRkX3Jlc2lkdWFscykKICApCmBgYAojVW5uZXN0aW5nCmBgYHtyfQpyZXNpZHMgPC0gdW5uZXN0KGJ5X2NvdW50eSwgcmVzaWRzKQpgYGAKI1Bsb3R0aW5nIHRoZSByZXNpZHVhbHMKYGBge3J9CnJlc2lkcyAlPiUKICBnZ3Bsb3QoYWVzKGZpcnN0X2RheV9vZl9tb250aCwgcmVzaWQpKSArCiAgZ2VvbV9saW5lKGFlcyhncm91cCA9IGNmaXBzKSwgYWxwaGEgPSAxLzMpICsKICBnZW9tX3Ntb290aChzZSA9IEZBTFNFKQoKYGBgCiNGYWNldHRpbmcgYnkgc3RhdGUKYGBge3J9CnJlc2lkcyAlPiUgCiAgZ2dwbG90KGFlcyhmaXJzdF9kYXlfb2ZfbW9udGgsIHJlc2lkLCBncm91cCA9IGNmaXBzKSkgKwogIGdlb21fbGluZShhbHBoYSA9IDEvMykgKwogIGZhY2V0X3dyYXAofnN0YXRlKQpgYGAKI0V4dHJhY3RpbmcgbW9kZWwgcXVhbGl0eQpgYGB7cn0KZ2xhbmNlIDwtIGJ5X2NvdW50eSAlPiUgCiAgbXV0YXRlKGdsYW5jZSA9IG1hcChtb2RlbCwgYnJvb206OmdsYW5jZSkpICU+JQogIHVubmVzdChnbGFuY2UpCmBgYAojQXJyYW5nZSBieSBSIHNxdWFyZQpgYGB7cn0KZ2xhbmNlICU+JSAKICBhcnJhbmdlKHIuc3F1YXJlZCkKYGBgCiNQbG90IHdvcnN0IHIgc3F1YXJlZApgYGB7cn0KZ2xhbmNlICU+JSAKICBnZ3Bsb3QoYWVzKHN0YXRlLCByLnNxdWFyZWQpKSArCiAgZ2VvbV9qaXR0ZXIod2lkdGggPSAwLjUpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwKSkKYGBgCgojRmFibGUgCgpgYGB7cn0KdHNfY291bnR5IDwtIGFzX3RzaWJibGUoYnlfY291bnR5W1szXV1bMV0pCmBgYAoKYGBge3J9CmJ5X2NvdW50eSAlPiUKICBmaWx0ZXIoCiAgICBzdGF0ZSAlaW4lIGMoIlRleGFzIiksCiAgKSAlPiUKICBtb2RlbCgKICAgIGV0cyA9IEVUUyhib3hfY294KG1pY3JvYnVzaW5lc3NfZGVuc2l0eSwgMC4zKSksCiAgICBhcmltYSA9IEFSSU1BKGxvZyhtaWNyb2J1c2luZXNzX2RlbnNpdHkpKSwKICAgIHNuYWl2ZSA9IFNOQUlWRShtaWNyb2J1c2luZXNzX2RlbnNpdHkpCiAgKSAlPiUKICBmb3JlY2FzdChoID0iMiBtb250aHMiKSAlPiUKICBhdXRvcGxvdChmaWx0ZXIoYnlfY291bnR5KSkKYGBgCgp0